package com.dolphin.aiagentplatform.utils;

/**
 * 参数校验工具类
 * 提供通用的参数校验方法
 */
public class ValidationUtils {

    /**
     * 账号格式校验
     * 只允许字母、数字、下划线，长度3-20位
     *
     * @param account 用户账号
     * @return 是否合法
     */
    public static boolean isValidAccount(String account) {
        if (account == null) {
            return false;
        }
        // 只允许字母数字下划线，3-20位
        return account.matches("^[a-zA-Z0-9_]{3,20}$");
    }

    /**
     * 密码强度校验
     * 至少包含一个大写字母、一个小写字母、一个数字，长度8-20
     *
     * @param password 密码
     * @return 是否合法
     */
    public static boolean isStrongPassword(String password) {
        if (password == null) {
            return false;
        }
        // 至少包含一个大写字母、一个小写字母、一个数字，长度8-20
        return password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,20}$");
    }

    /**
     * 密码基础校验
     * 只允许字母和数字，长度8-20位，不允许特殊字符
     *
     * @param password 密码
     * @return 是否合法
     */
    public static boolean isValidPassword(String password) {
        if (password == null) {
            return false;
        }
        // 只允许字母和数字，长度8-20位
        return password.matches("^[a-zA-Z0-9]{8,20}$");
    }

    /**
     * 增强版密码强度校验
     * 至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符，长度8-20
     *
     * @param password 密码
     * @return 是否合法
     */
    public static boolean isEnhancedStrongPassword(String password) {
        if (password == null) {
            return false;
        }
        // 至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符，长度8-20
        return password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,20}$");
    }

    /**
     * 用户名格式校验
     * 只允许中文、字母、数字、下划线，长度2-20位
     *
     * @param username 用户名
     * @return 是否合法
     */
    public static boolean isValidUsername(String username) {
        if (username == null) {
            return false;
        }
        // 只允许中文、字母、数字、下划线，长度2-20位
        return username.matches("^[\\u4e00-\\u9fa5a-zA-Z0-9_]{2,20}$");
    }

    /**
     * 手机号码格式校验
     *
     * @param phone 手机号码
     * @return 是否合法
     */
    public static boolean isValidPhone(String phone) {
        if (phone == null) {
            return false;
        }
        // 中国大陆手机号验证
        return phone.matches("^1[3-9]\\d{9}$");
    }

    /**
     * 邮箱格式校验
     *
     * @param email 邮箱
     * @return 是否合法
     */
    public static boolean isValidEmail(String email) {
        if (email == null) {
            return false;
        }
        // 邮箱格式验证
        return email.matches("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");
    }

    /**
     * URL格式校验
     *
     * @param url URL地址
     * @return 是否合法
     */
    public static boolean isValidUrl(String url) {
        if (url == null) {
            return false;
        }
        // URL格式验证
        return url.matches("^(http|https)://[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,}(:[0-9]+)?(/.*)?$");
    }
} 